package com.javalsj.common.base.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;

/**
 * @description ALIBABA FASTJSON工具
 * @author WANGJIHONG
 * @date 2018年10月20日 下午5:59:01
 * @Copyright 版权所有 (c) www.javalsj.com
 * @memo 无
 */
public final class FastJsonUtils {
	
	/**
	 * 把Java对象转换成JSON字符串
	 *
	 * @param object
	 *            待转化为JSON字符串的Java对象
	 * @return JSON 串 or null
	 */
	public static String parseObjToJson(Object object) {
		String string = null;
		try {
			string = JSONObject.toJSONString(object);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return string;
	}

	/**
	 * 将JSON字符串信息转换成对应的Java对象
	 *
	 * @param json
	 *            JSON字符串对象
	 * @param c
	 *            对应的类型
	 */
	public static <T> T parseJsonToObj(String json, Class<T> c) {
		try {
			JSONObject jsonObject = JSON.parseObject(json);
			return JSON.toJavaObject(jsonObject, c);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 将JSON字符串信息转换成对应的JavaBean,适合复杂结构的对象转化
	 * 如:Map<UUID ,RegionDataCommitSet> changeDataMap =  FastJsonUtils.parseJsonToObj(changeDataJson, new TypeReference<HashMap<UUID, RegionDataCommitSet>>(){});
	 */
	public static <T> T parseJsonToObj(String json, TypeReference<T> typeReference, Feature... features) {
		return JSON.parseObject(json, typeReference, features);
	}

}
